#ifndef __THREAD_H__
#define __THREAD_H__

#include <exception>
#include <pthread.h>
#include <functional>
#include <string>
#include <sw/redis++/errors.h>

using std::function;
using std::bind;
using std::string;

class Thread;

//=========新加==================
extern __thread const char *name;
//  线程
class Thread{
    using ThreadCallback = function<void()>;

public:
    //===============新加：构造函数新加第二个参数，用来表示线程名字==========
    Thread(ThreadCallback &&cb, const string &name = string());
    ~Thread();

    // 线程运行函数
    void start();
    // 线程退出函数
    void join();

    Thread* getThreadPtr(){
        return this;
    }

private:
    // 线程入口函数
    static void *threadFunc(void *arg);

private:
    pthread_t _thid;// 线程 id 
    bool _isRunning;// 线程是否运行的标志
    ThreadCallback _cb;// 存任务的
    //==========新加================
    string _name;
};

#endif
